package com.jy.wms.service;

import com.alibaba.fastjson.JSONArray;
import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;

import com.jy.wms.common.UUIDUtils;
import com.jy.wms.common.annotions.BaseServiceDescribe;
import com.jy.wms.common.base.BaseService;
import com.jy.wms.common.base.ServiceException;
import com.jy.wms.dao.SysUserMapper;
import com.jy.wms.pojo.*;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Service;
import org.springframework.web.bind.annotation.ResponseBody;

import java.util.List;


/**
 * @ClassName: SysUserService.java
 * @Description: TODO(这里用一句话描述这个类的作用)
 * @Author zzp
 * @Date Tue Aug 29 14:54:17 CST 2017
 */

@Service
public class SysUserService extends BaseService<SysUserMapper,SysUser> {

    /**
     * 插入一条记录
     * @param entity 实体对象
     * @param database 数据库名称
     * @return int
     */
    @BaseServiceDescribe(moduleName = "用户管理",btnName = "新增用户")
    public void baseInsert( SysUser entity, String database,String baseDB)throws ServiceException {
        try{
           // String yz= generateSalt.getSalt();
            String mms="666666";
            entity.setId(UUIDUtils.uuid());
          //  entity.setMm(generateSalt.toPwdSalt(mms,yz));
            //entity.setYz(yz);
            entity.setSfyx("1");
            entity.setSjk(database);//数据库名称
            Integer falg=0;
            falg=dao.baseInsert(entity,baseDB);
            if(!baseDB.equals(database)){
                falg=dao.baseInsertcb(entity,database);
            }
            SysDictionary sysDictionary= getSysdictionary("sys_user_xb",entity.getXb(),baseDB);
            entity.setShow_xb(sysDictionary.getD_name());
            SysDictionary sysDictionary1= getSysdictionary("sys_user_lx",entity.getLx(),baseDB);
            entity.setShow_lx(sysDictionary1.getD_name());
            SysDictionary sysDictionary2= getSysdictionary("sys_user_sfyx",entity.getSfyx(),baseDB);
            entity.setShow_sfyx(sysDictionary2.getD_name());
            if (falg<0){
                throw new ServiceException("用户管理新增");
            }
        }catch (Exception e){
            throw new ServiceException("用户管理新增",e);
        }
    }

    /**
     * 插入一条记录（子表）
     * @param entity 实体对象
     * @param database 数据库名称
     * @return int
     */
    public Integer baseInsertcb(@Param("SysUser") SysUser entity, @Param("database") String database){
        return dao.baseInsertcb(entity,database);
    }
    /**
     * 插入一条记录（匹配有值的字段）
     * @param entity 实体对象
     * @param database 数据库名称
     * @return int
     */
    public Integer baseInsertSelective( SysUser entity,String database ){
        return dao.baseInsertSelective( entity,database );
    }



    /**
     * 删除（根据ID 批量删除）
     * @param idList 主键ID列表
     * @param database 数据库名称
     * @return int
     */
    public Integer baseDeleteBathPrimaryKeys( List<String> idList,String database ){
        return dao.baseDeleteBathPrimaryKeys( idList,database );
    }

    /**
     * 分页查询
     * @param entity 实体
     * @param database 数据库名称
     * @return Page<SysUser>
     */
    @BaseServiceDescribe(moduleName = "用户管理",btnName = "分页查询")
    public Page<SysUser> baseSelectPage(SysUser entity, String database) throws Exception{
        Page<SysUser> list=null;
        try{
            PageHelper.startPage(entity.getPage(),entity.getRows());
            list=(Page<SysUser>)dao.baseSelectPage(entity,database);
             return list;
        }catch (Exception e){
            throw new ServiceException("用户管理分页查询失败",e);
        }

    }

    /**
     * 分页查询 （仓管查询货主）
     * @param entity 实体
     * @param database 数据库名称
     * @return List<SysUser>
     */
    public List<SysUser>  ownerSelectPage(@Param("SysUser") SysUser entity, @Param("database") String database){
        return dao.ownerSelectPage(entity, database);
    }

    /**
     * 分页查询 （货主查询供应商）
     * @param entity 实体
     * @param database 数据库名称
     * @return List<SysUser>
     */
  /*  public List<SysUser>  supplierSelectPage(@Param("SysUser") SysUser entity, @Param("database") String database){
        return  dao.supplierSelectPage(entity, database);
    }*/
    /**
     * 查询（根据主键ID查询）
     * @param id 主键ID
     * @param database 数据库名称
     * @return SysUser
     */

    @BaseServiceDescribe(moduleName = "用户管理",btnName = "根据id查询用户")
    public SysUser baseSelectByPrimaryKey( String id,String database )throws Exception{
        SysUser sysUser=null;
        try {
           sysUser=dao.baseSelectByPrimaryKey( id,database );
        }catch (Exception e){
            throw new ServiceException("根据id查询用户信息失败",e);
        }
        return sysUser;
    }

    /**
     * 查询（根据ID 批量查询）
     * @param idList 主键ID列表
     * @param database 数据库名称
     * @return list
     */
    public Integer baseSelectBathPrimaryKeys( List<SysUser> idList,String database ){
        return dao.baseSelectBathPrimaryKeys( idList,database );
    }

    /**
     *修改 （匹配有值的字段）
     * @param entity 主键ID列表
     * @param database 数据库名称
     * @return int
     */

    public Integer baseUpdateByPrimaryKeySelective( SysUser entity,String database ){
        return dao.baseUpdateByPrimaryKeySelective( entity,database );
    }

    /**
     *修改（根据主键ID修改）
     * @param entity 主键ID列表
     * @param database 数据库名称
     * @return int
     */
    public Integer baseUpdateByPrimaryKey( SysUser entity, String database ){

        return dao.baseUpdateByPrimaryKey( entity,database );
    }

    /**
     *激活  and  作废（根据主键ID修改）
     * @param id 主键ID列表
     * @param database 数据库名
     * @return int
     */
    @BaseServiceDescribe(moduleName = "用户管理",btnName = "激活和作废")
    public void activation(String [] id, String sfyx, @Param("database") String database, String baseDB)throws ServiceException{
        try {
            Integer flag=0;
            if (database.equals(baseDB)){
                flag=dao.activation(id,sfyx,database);
            }else {
                flag=dao.activation(id, sfyx, database);
                flag=dao.activation(id, sfyx, baseDB);
            }
            if (flag==0){
                if (sfyx.equals("1")){
                    throw new ServiceException("激活");
                }else if(sfyx.equals("2")){
                    throw new ServiceException("作废");
                }
            }
        }catch (Exception e){
            if (sfyx.equals("1")){
                throw new ServiceException("激活",e);
            }else if(sfyx.equals("2")){
                throw new ServiceException("作废",e);
            }

        }
    }

    /**
     * 查询角色
     * @param entity
     * @param database
     * @return
     */
    @BaseServiceDescribe(moduleName = "用户管理",btnName = "查询角色信息")
    public List<SysRole> jsSelectPage(SysRole entity, String database) throws Exception{
        //  PageHelper.startPage(entity.getPageNum(),entity.getPageSize());
        List<SysRole> list=null;
        try {
           list=dao.jsSelectPage(entity,database);
           return list;
        }catch (Exception e){
            throw new ServiceException("查询角色信息失败",e);
        }
    }

    /**
     * 赋予角色
     */
    @BaseServiceDescribe(moduleName = "用户管理",btnName = "赋予角色")
    public void roolUrse(@Param("SysRoleUser") SysRoleUser sru, @Param("database") String database)throws ServiceException{
        try{
            Integer falg=0;
                    falg=dao.roolUrse(sru, database);
            if (falg<0){
                throw new ServiceException("赋予角色失败");
            }
        }catch (Exception e){
            throw new ServiceException("赋予角色失败",e);
        }
    }

    /**
     * 修改密码
     */
    @BaseServiceDescribe(moduleName = "用户管理",btnName = "修改密码")
    public Integer modifyPassword(String id, String mm,String yz, String database,String basedb) {
        int i=0;
        i=dao.modifyPassword(id, mm, yz, basedb);
     if (!basedb.equals("database")){
         i=dao.modifyPassword(id, mm, yz, database);
     }
        return i;
    }

    /**
     * 数据权限查询(货主)
     * 查询条件  sm
     */
    @BaseServiceDescribe(moduleName = "用户管理",btnName = "模糊查询货主")
    public Page<WmsOwner> roleSelect(String mc, Integer page, Integer rows, String database)throws Exception{
        Page<WmsOwner> list=null;
        try {
            PageHelper.startPage(page,rows);
            list=(Page<WmsOwner>)dao.roleSelect(mc,database);
            return list;
        }catch (Exception e){
            throw new ServiceException("数据权限货主查询失败",e);
        }
    }

    /**
     * 数据权限查询(用户选中的货主)
     * 查询条件  sm
     */
    @BaseServiceDescribe(moduleName = "用户管理",btnName = "查询用户选中的货主")
    public List<String> sfUser(String yhid, @Param("database") String database)throws Exception{
        List<String> list;
        try{
            list=dao.sfUser(yhid,database);
            return list;
        }catch (Exception e){
            throw new ServiceException("查看用户已绑定货主失败",e);
        }

    }

    /**
     * 数据权限查询(用户选中的供应商)
     * 查询条件  sm
     */
    @BaseServiceDescribe(moduleName = "用户管理",btnName = "查询用户已绑定的供应商")
    public List<String>  gysUser(@Param("yhid") String yhid, @Param("database") String database)throws Exception{
        List<String> list;
        try{
            list=dao.gysUser(yhid,database);
            return list;
        }catch (Exception e){
            throw new ServiceException("查看用户已绑定供应商失败",e);
        }
    }

    /**
     * 数据权限添加(货主)
     */
    @BaseServiceDescribe(moduleName = "用户管理",btnName = "数据权限添加货主")
    public void roleAdd(List<WmsUserOwner> entity, @Param("database") String database)throws ServiceException{
        try{
            Integer falg=0;
            falg=dao.roleAdd(entity, database);
            if (falg==0){
                throw new ServiceException("货主数据权限添加失败");
            }
        }catch (Exception e){
            throw new ServiceException("货主数据权限添加失败",e);
        }
    }

    /**
     * 数据权限查询(供应商)
     * 查询条件  sm
     */
    @BaseServiceDescribe(moduleName = "用户管理",btnName = "数据权限查询供应商")
    public Page<WmsOwnerSupplier> supplierSelect(WmsOwnerSupplier entity, String database)throws Exception{
        Page<WmsOwnerSupplier> list=null;
        try {
            PageHelper.startPage(entity.getPage(),entity.getRows());
            list=(Page<WmsOwnerSupplier>)dao.supplierSelect(entity,database);
            return list;
        }catch (Exception e){
            throw new ServiceException("数据权限供应商查询失败",e);
        }
    }

    /**
     * 数据权限添加(供应商)
     */
    @BaseServiceDescribe(moduleName = "用户管理",btnName = "数据权限添加供应商")
    public void supplierAdd( WmsUserSupplier entity, String database)throws ServiceException{
        try{
            Integer falg=0;
            falg=dao.supplierAdd(entity, database);
            if (falg<0){
                throw new ServiceException("供应商数据权限添加失败");
            }
        }catch (Exception e){
            throw new ServiceException("供应商数据权限添加失败",e);
        }
    }
    /**
     * 切换货主查询(货主)
     * 查询条件  sm
     *
     */
    @BaseServiceDescribe(moduleName = "用户管理",btnName = "切换货主 查询货主")
    public List<WmsUserOwner>  switchSelect(@Param("WmsUserOwner") WmsUserOwner entity, @Param("database") String database)throws Exception{
        List<WmsUserOwner> list=null;
        try {
            list=dao.switchSelect(entity,database);
            return list;
        }catch (Exception e){
            throw new ServiceException("切换货主查询货主失败",e);
        }
    }

    /**
     * 根据id查询货主（根据主键ID查询）
     * @return User
     */
    @BaseServiceDescribe(moduleName = "用户管理",btnName = "根据id查询货主")
    public List<WmsOwner> switchSelectId(List<String> list)throws  Exception{
        List<WmsOwner> list1=null;
        try {
           list1=dao.switchSelectId(list);
           return list1;
        }catch (Exception e){
            throw new ServiceException("切换货主查询货主失败",e);
        }
    }

    /**
     *  查询仓库
     * @param mc
     * @param database
     * @return
     */
    @BaseServiceDescribe(moduleName = "用户管理",btnName = "模糊查询仓库")
    public List<WmsWarehouse> addSearchArea(@Param("mc")String mc, String database){
        if(mc!=null && !mc.equals("")){
        }else{
            PageHelper.startPage(1,20);
        }
        return dao.addSearchArea(mc, database);
    }

    /**
     * 查询货主
     * @param mc
     * @param database
     * @return
     */
    @BaseServiceDescribe(moduleName = "用户管理",btnName = "模糊查询货主")
    public List<WmsOwner> hzSearch(String mc,String database){
        if (mc!=null && mc.equals("")){
        }else{
            PageHelper.startPage(1,20);
        }
        return dao.hzSearch(mc, database);
    }

    /**
     *  查询角色
     * @param mc
     * @param database
     * @return
     */
    @BaseServiceDescribe(moduleName = "用户管理",btnName = "模糊查询角色")
    public List<SysRole> addSearchJs(@Param("mc")String mc, @Param("yhid")String yhid, String database){
        if(mc!=null && !mc.equals("") && yhid!=null && !yhid.equals("")){
        }else{
            PageHelper.startPage(1,20);
        }
        return dao.addSearchJs(mc,yhid,database);
    }

    /**
     * 查询供应商
     * @param mc
     * @param database
     * @return
     */
    @BaseServiceDescribe(moduleName = "用户管理",btnName = "模糊查询供应商")
    public List<WmsOwnerSupplier> addSearchGys(@Param("mc") String mc, @Param("database")String database){
        if (mc!=null && !mc.equals("")){
            PageHelper.startPage(1,20);
        }
        return dao.addSearchGys(mc, database);
    }

    /**
     * 重置密码
     */
    @BaseServiceDescribe(moduleName = "用户管理",btnName = "重置密码")
    public boolean resetpassword(String[] id,String database,String basedb){
        int i=0;
        i=dao.resetpassword(id,basedb);
        if(!basedb.equals(database)){
            i=dao.resetpassword(id,database);
        }
        if(i>0)
            return true;
        else
            return false;
    }

    /**
     * 根据用户ｉｄ查询是角色
     */
    @BaseServiceDescribe(moduleName = "用户管理",btnName = "根据id查询角色")
    public SysRoleUser jsSelectId(@Param("id") String id, @Param("database") String database){
        return dao.jsSelectId(id, database);
    }

    /**
     * 删除用户角色（根据主键ID删除）
     * @param id 主键
     * @param database 数据库名称
     * @return int
     */
    @BaseServiceDescribe(moduleName = "用户管理",btnName = "删除用户角色")
    public Integer baseDeleteByPrimaryKey( String id,String database ){
        return dao.baseDeleteByPrimaryKey( id,database );
    }

    /**
     * 根据用户ｉｄ查询是货主
     */
    @BaseServiceDescribe(moduleName = "用户管理",btnName = "根据id查询货主")
    public List<String> hzSelectId(String ckid){
        return  dao.hzSelectId(ckid);
    }
    /**
     * 删除用户角色（根据主键ID删除）
     * @param id 主键
     * @param database 数据库名称
     * @return int
     */
    @BaseServiceDescribe(moduleName = "用户管理",btnName = "根据id删除用户角色")
    public Integer hzDeleteByPrimaryKey(@Param("id") String  id, @Param("database") String database){
        return dao.hzDeleteByPrimaryKey(id, database);
    }

    /**
     * 根据用户ｉｄ查询是供应商
     */
    @BaseServiceDescribe(moduleName = "用户管理",btnName = "根据id查询供应商")
    public WmsUserSupplier gysSelectId(@Param("id") String id, @Param("database") String database){
        return dao.gysSelectId(id, database);
    }

    /**
     * 删除用户供应商（根据主键ID删除）
     * @param id 主键
     * @param database 数据库名称
     * @return int
     */
    @BaseServiceDescribe(moduleName = "用户管理",btnName = "根据id删除供应商")
    public Integer gysDeleteByPrimaryKey(@Param("id") String id, @Param("database") String database){
        return dao.gysDeleteByPrimaryKey(id, database);
    }

    /**
     * 根据id 查询仓库名称
     */
    @BaseServiceDescribe(moduleName = "用户管理",btnName = "根据id查询仓库名称")
    public WmsWarehouse searchArea(@Param("id") String id, @Param("database") String database){
        return dao.searchArea(id, database);
    }

    /**
     * 根据用户id查询角色
     */
    @BaseServiceDescribe(moduleName = "用户管理",btnName = "查询用户已绑定的角色")
    public List<String> jsUser(@Param("yhid") String yhid, @Param("database") String database)throws Exception{
        List<String> list=null;
        try{
            list=dao.jsUser(yhid, database);
            return list;
        }catch (Exception e){
            throw new ServiceException("查看用户已绑定角色失败",e);
        }

    }

    /**
     * 根据id查询盐值
     */
    public SysUser idYz(@Param("id") String [] id, @Param("database") String database){
            return dao.idYz(id, database);
    }

    /**
     *dlm不能相同
     */
    @BaseServiceDescribe(moduleName = "用户管理",btnName = "查询用户名是否存在")
    public Integer getcount(String dlm,String datebase){
        return dao.getcount(dlm, datebase);
    }

    /**
     * 查询字典
     * @param type
     * @param value
     * @param baseDB
     * @return
     */
    public @ResponseBody
    SysDictionary getSysdictionary(String type, String value, String baseDB) {
        JSONArray jsonArray = new JSONArray();
        SysDictionary sysDictionary = dao.baseSelectByType(type,value, baseDB);
        return sysDictionary;
    }
}
